﻿Type.registerNamespace("MoniMisi2");

MoniMisi2.ComboGrilla = function(element) {
    MoniMisi2.ComboGrilla.initializeBase(this, [element]);
   
    this.value = null;
    this.DelOnKeyDown = Function.createDelegate(this, this.OnKeyDown);
    this.DelSalida = Function.createDelegate(this, this.Salida);
    this.DelSeleccion = Function.createDelegate(this, this.Seleccion);
    this.DelFilaCreada = Function.createDelegate(this, this.FilaCreada);
    this.DelPermanecer = Function.createDelegate(this, this.Permanecer);
    this.DelLoad = Function.createDelegate(this, this.OnLoadAplicacion);
    this.DelEncontrado = Function.createDelegate(this, this.ValorEncontrado);
    this.DelDescEncontrado = Function.createDelegate(this, this.DescEncontrado);
    this.DelBuscar = Function.createDelegate(this, this.Buscar);
    this.DelOrden = Function.createDelegate(this, this.Ordenar);
    this.Permanecer = false
    this.Defecto = null;
    this.Texto = null;
    this.CssError = null;
    this.CssCorrecto = null;
    this.AceptaBlanco = true;
    this.Orden = null;
    this.GrillaTargetId = null;
    this.Funciones = new MoniMisi2.Funciones();
    this.Grilla = null;
    this.ControlGrilla = null;
    this.Valor = null;
    this.Descripcion = null;
    this.Puntero = null;
    this.TempoBusqueda = null;
    this.ProgresoBusqueda = null;
    this.Cambio = false;
    this.OrdenesActivos = false;
    this.Ordenando = false;
    //this.spanError = null;
    this.DelValida = null;
};

MoniMisi2.ComboGrilla.prototype = {

    initialize: function() {
        MoniMisi2.ComboGrilla.callBaseMethod(this, 'initialize');
        this.Texto = this._element
        this.DelValida = Function.createDelegate(this, this.ValidaRangos);
        this.Texto.setAttribute('autocomplete', 'off');
        $addHandler(this.Texto, "keydown", this.DelOnKeyDown);
        $addHandler(this.Texto, "blur", this.DelSalida);
        Sys.Application.add_load(this.DelLoad)
        this.add_Validando(this.DelValida)
        this.Funciones.InitValidarControl(this);
        this.Validar();
    },
    dispose: function() {
        MoniMisi2.ComboGrilla.callBaseMethod(this, 'dispose');
    },

    OnLoadAplicacion: function() {
        this.ControlGrilla = $find(this.GrillaTargetId + "$Grilla");
        if (this.ControlGrilla != null) {
            this.ControlGrilla.add_FilaCreada(this.DelFilaCreada);
            this.ControlGrilla.add_Seleccionado(this.DelSeleccion);
            this.ControlGrilla.add_Elegido(this.DelSeleccion);
            this.Grilla = this.ControlGrilla._element.parentNode.parentNode;
            this.Grilla.style.display = "none";
        };
    },
    FilaCreada: function(sender, e) {
        $addHandler(e.Fila, "mousedown", this.DelPermanecer);
        if (!this.OrdenesActivos) {
            for (var O in this.ControlGrilla.CeldasOrden) {
                $addHandler(this.ControlGrilla.CeldasOrden[O], "mousedown", this.DelOrden);
            }
            this.OrdenesActivos = true;
        }
    },
    Permanecer: function(e) {
        this.Permanecer = true;
    },
    Ordenar: function(e) {
        this.Permanecer = true;
        this.Ordenando = true;
    },
    Seleccion: function(sender, e) {
        if (!this.Ordenando) {
            if (this.Permanecer) {
                this._element.value = e.Registro[this.Descripcion];
                this.value = e.Registro[this.Valor]
                if (this._element.style.display == "") { this._element.focus(); }
                this.Grilla.style.display = "none";
                this.Permanecer = false;
            } else {
                this.value = e.Registro[this.Valor];
            }
        } else {
            this.Ordenando = false;
            this.Permanecer = false;
            if (this._element.style.display == "") { this._element.focus(); }
        }
    },
    Salida: function(e) {
        if (!this.Permanecer) {
            this.Grilla.style.display = "none";
            if (this.Cambio) {
                var EsBlanco = this.Texto.value.replace(/ /g, "").length == 0;
                if (this.AceptaBlanco && EsBlanco) {
                    this.value = null;
                } else {
                    this.Texto.value = this.ControlGrilla.Datos.Registro[this.Descripcion];
                    this.value = this.ControlGrilla.Datos.Registro[this.Valor];
                }
                this.Validar()
                this.Cambio = false;
            }
        }
    },
    ValidaRangos: function(sender, e) {
        if (!sender.AceptaBlanco && e.Valor == null) {
            e.Erroneo = true;
            e.Mensaje = "- no puede ser blanco";
        }
    },
    Validar: function() {
        if (this.ControlGrilla != null) {
            this.Funciones.ValidarControl(this, this.value);
        }
    },

    OnKeyDown: function(e) {

        this.Grilla.style.display = "";
        this.Grilla.style.zIndex = 1000;
        this.Funciones.Anclar(this._element, "SO", this.Grilla, "NO");
        var Tecla = e.keyCode
        this.ProgresoBusqueda = 0;
        if (this.TempoBusqueda != null) {
            clearInterval(this.TempoBusqueda);
            if (Tecla == 9 || Tecla == 16) {
                this.Cambio = true;
                this.ControlGrilla.Buscar(this.Texto.value);
            }
        }
        if (Tecla == 40 || Tecla == 38 || Tecla == 33 || Tecla == 34 || Tecla == 13) {
            this.Cambio = true;
            if (Tecla == 13) { this.Permanecer = true; }
            this.ControlGrilla.Teclado(e)
        } else {
            if (Tecla != 9 && Tecla != 16) {
                this.TempoBusqueda = setInterval(this.DelBuscar, 10);
            }
        }
    },

    Buscar: function() {
        this.ProgresoBusqueda = this.ProgresoBusqueda + 1;
        if (this.ProgresoBusqueda >= 50) {
            this.ProgresoBusqueda = 0;
            clearInterval(this.TempoBusqueda);
            this.Cambio = true;
            this.ControlGrilla.Buscar(this.Texto.value);
        }
    },

    Refrescar: function() {
        this.ControlGrilla.Refrescar();
    },

    get_Valor: function() {
        return this.Valor;
    },

    set_Valor: function(value) {
        if (this.Valor !== value) {
            this.Valor = value
            this.raisePropertyChanged('Valor');
        }
    },


    get_value: function() {
        return this.value;
    },

    set_value: function(value) {
        this.value = value;
        if (value != null) {
            this.Puntero = this.ControlGrilla.Datos.Puntero
            this.ControlGrilla.Datos.add_Encontrado(this.DelEncontrado)
            this.ControlGrilla.Datos.Buscar({ Orden: this.ControlGrilla.Datos.IndiceOrden(this.Valor), Valor: value });
        } else {
            this.Texto.value = "";
        }
    },

    ValorEncontrado: function(sender, e) {
        this.ControlGrilla.Datos.remove_Encontrado(this.DelEncontrado);
        this.Texto.value = this.ControlGrilla.Datos.Registro[this.Descripcion];
        this.ControlGrilla.add_Encontrado(this.DelDescEncontrado)
        this.ControlGrilla.Buscar(this.Texto.value, this.ControlGrilla.Datos.IndiceOrden(this.Descripcion));
    },
    DescEncontrado: function(sender, e) {
        this.ControlGrilla.remove_Encontrado(this.DelDescEncontrado);
        this.Validar();
        this.raisePropertyChanged('value');
    },


    get_Descripcion: function() {
        return this.Descripcion;
    },

    set_Descripcion: function(value) {
        if (this.Descripcion !== value) {
            this.Descripcion = value;
            this.raisePropertyChanged('Descripcion');
        }
    },
    get_CssError: function() {
        return this.CssError;
    },

    set_CssError: function(value) {
        if (this.CssError !== value) {
            this.CssError = value;
            this.raisePropertyChanged('CssError');
        }
    },
    get_Defecto: function() {
        return this.Defecto;
    },

    set_Defecto: function(value) {
        if (this.Defecto !== value) {
            this.Defecto = value;
            this.raisePropertyChanged('Defecto');
        }
    },

    get_GrillaTargetId: function() {
        return this.GrillaTargetId;
    },

    set_GrillaTargetId: function(value) {
        if (this.GrillaTargetId !== value) {
            this.GrillaTargetId = value;
            this.raisePropertyChanged('GrillaTargetId');
        }
    },



    add_Validando: function(handler) {
        this.get_events().addHandler('Validando', handler);
    },
    remove_Validando: function(handler) {
        this.get_events().removeHandler('Validando', handler);
    }
}

MoniMisi2.ComboGrilla.registerClass('MoniMisi2.ComboGrilla', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();